package com.zero.common.security.context;

import com.zero.common.core.text.Convert;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;

/**
 * 权限信息
 * RequestContextHolder 是 Spring 框架提供的一个工具类
 * 用于获取当前请求的上下文（RequestAttributes）。
 * 它能够帮助我们从当前线程中获取与 HTTP 请求相关的信息。
 */
public class PermissionContextHolder {
    private static final String PERMISSION_CONTEXT_ATTRIBUTES = "PERMISSION_CONTEXT";

    // 设置所需权限
    public static void setContext(String permission) {
        RequestContextHolder
                .currentRequestAttributes()
                .setAttribute(
                        // key
                        PERMISSION_CONTEXT_ATTRIBUTES,
                        // value
                        permission,
                        // SCOPE_REQUEST 表示这个属性是存储在请求范围内的，即它只对当前请求有效。当请求处理结束后，这个属性会被清除。
                        RequestAttributes.SCOPE_REQUEST
                );
    }

    // 获取所需权限
    public static String getContext() {
        return Convert.toStr(
                RequestContextHolder
                        .currentRequestAttributes()
                        .getAttribute(
                                // key
                                PERMISSION_CONTEXT_ATTRIBUTES,
                                // scope
                                RequestAttributes.SCOPE_REQUEST
                        ));
    }
}
